libobs_simple\sources\linux\sources\pipewire/
restore_updater.rs1use libobs_wrapper::{
2 data::{object::ObsObjectTrait, ObsData, ObsDataUpdater, ObsObjectUpdater},
3 runtime::ObsRuntime,
4 utils::{ObsError, ObsString},
5};
6
7use crate::sources::linux::pipewire::ObsPipeWireSourceRef;
8
9pub struct ObsPipeWireGeneralUpdater<'a> {
10 settings: ObsData,
11 settings_updater: ObsDataUpdater,
12 updatable: &'a mut ObsPipeWireSourceRef,
13}
14
15impl<'a> ObsObjectUpdater<'a, *mut libobs::obs_source> for ObsPipeWireGeneralUpdater<'a> {
16 type ToUpdate = ObsPipeWireSourceRef;
17
18 fn get_id() -> libobs_wrapper::utils::ObsString {
19 ObsString::new("pipewire-restore-token-updater")
20 }
21
22 fn create_update(
23 runtime: ObsRuntime,
24 updatable: &'a mut Self::ToUpdate,
25 ) -> Result<Self, ObsError> {
26 let mut settings = ObsData::new(runtime)?;
27
28 Ok(Self {
29 settings_updater: settings.bulk_update(),
30 settings,
31 updatable,
32 })
33 }
34
35 fn get_settings(&self) -> &ObsData {
36 &self.settings
37 }
38
39 fn get_settings_updater(&mut self) -> &mut ObsDataUpdater {
40 &mut self.settings_updater
41 }
42
43 fn update(self) -> Result<(), ObsError> {
44 let ObsPipeWireGeneralUpdater {
45 settings_updater,
46 updatable,
47 settings,
48 } = self;
49
50 settings_updater.apply()?;
51
52 updatable.update_settings(settings)
53 }
54
55 fn runtime(&self) -> &ObsRuntime {
56 self.updatable.runtime()
57 }
58}
59
60impl<'a> ObsPipeWireGeneralUpdater<'a> {
61 pub fn set_show_cursor(mut self, show: bool) -> Self {
62 self.settings_updater.set_bool_ref("ShowCursor", show);
63 self
64 }
65
66 pub fn with_cursor(self) -> Self {
68 self.set_show_cursor(true)
69 }
70}